package com.zyq.code;

/**
 * @author zhangyanqiang
 * @date 2020/10/22
 **/
public class ShuiXian {

    /**
     * 水仙花数的定义是，这个数等于他每一位数上的幂次之和 见维基百科的定义
     *
     * 比如一个3位的十进制整数153就是一个水仙花数。因为 153 = 13 + 53 + 33。
     *
     * 而一个4位的十进制数1634也是一个水仙花数，因为 1634 = 14 + 64 + 34 + 44。
     *
     * 给出n，找到所有的n位十进制水仙花数。
     *
     * 输入: 1
     * 输出: [0,1,2,3,4,5,6,7,8,9]
     */

    private static int[] getShuiXianNumbers(int n){

        int start = (int)Math.pow(10,n-1);
        int end = (int)Math.pow(10,n);
        int[] result = new int[10];
        int c = 0;
        for (int i=start;i<end ; i++){
            int sum = 0;
            int b = i;
            while (b != 0){
                int num = b%10;
                sum = sum + (int)Math.pow(num,n);
                b = b/10;
            }
            if (i == sum){
                result[c] = (int)i;
                c++;
            }

        }
        return result;

    }

    public static void main(String[] args) {

        int [] result = getShuiXianNumbers(3);
        for (int i:result){
            if (i != 0){
                System.out.println(i);
            }

        }

    }


}
